/*
 * @Author       : Joel
 * @Date         : 2025-03-31 15:18:19
 * @LastEditors  : Joel
 * @LastEditTime : 2025-03-31 17:07:14
 * @FilePath     : /usr/board_driver/power_manager.c
 * @Description  : 
 * Copyright(C)2025 YiJiaLink, All Rights Reserved. 
 * 2025-03-31 15:18:19
 */
#include"power_manager.h"
/* GPIO */
static void DC_ENABLE_GPIOConfig(void);
static void VCC_ENABLE_GPIOConfig(void);
static void CHARGING_GPIOConfig(void);

static void DC_ENABLE_GPIOConfig(void)
{
    // PA2
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_2, LL_GPIO_MODE_OUTPUT);
    return;
}
static void VCC_ENABLE_GPIOConfig(void)
{
    // PA3
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_3, LL_GPIO_MODE_OUTPUT);
    return;
}
static void CHARGING_GPIOConfig(void)
{
    /* PA0 as input */
    LL_GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = LL_GPIO_PIN_0;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
    LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    return;
}
void power_init(void)
{
    DC_ENABLE_GPIOConfig();
    VCC_ENABLE_GPIOConfig();
    CHARGING_GPIOConfig();
    return;
}
uint8_t set_dc_enable(uint8_t flag)
{
    if (flag)
        LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2);
    else
        LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_2);
    return flag;
}
uint8_t set_vcc_enable(uint8_t flag)
{
    if (flag)
        LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_3);
    else
        LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_3);
    return flag;
}
int get_charging_state(void)
{
    return (int)LL_GPIO_IsInputPinSet(GPIOA, LL_GPIO_PIN_0);
}